﻿#ifndef AIEXPANDGRAPHICSCENE_H
#define AIEXPANDGRAPHICSCENE_H

#include <QGraphicsScene>
#include <GraphicsBaseItem.h>
#include <QUndoStack>

class GraphicsView;


class GraphicsScene : public QGraphicsScene
{
	Q_OBJECT
public:
	GraphicsScene(GraphicsView* view, QObject* parent = nullptr);
	~GraphicsScene();
	void setSelectItem(GraphicsBaseItem* baseItem);
	void addBaseItem(GraphicsBaseItem* baseItem);
	void pushCommand(QUndoCommand* command);
	void undo();
	void redo();
	void clearUndoStack();
	GraphicsView* getView();
	// 视图中心item
	void setCenterItem(GraphicsBaseItem* centerItem);
	GraphicsBaseItem* getCenterItem() { return m_centerItem; }
	void isEnableItems(bool isEnable);
	// test
	void printInfo();
signals:
	// test
	void sigPositionInfo(const QPointF& scenePos, const QString& posInfo);
	// 场景鼠标坐标
	void sigSceneMousePos(const QPointF& scenePos);
	// 扩图鼠标坐标
	void sigBoxMousePos(const QPointF& scenePos);
	// 扩图边界信息
	void sigBoxInfo(const QString& posInfo);
	// 图片边界信息
	void sigImageInfo(const QString& posInfo);
protected:
	virtual void drawBackground(QPainter* painter, const QRectF& rect)override;
	void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) override;
private:
	QVector<GraphicsBaseItem*> m_baseItemChilds;
	QUndoStack* m_undoStack = nullptr;
	QPointF m_lastScenePos;
	GraphicsView* m_view = nullptr;
	// 视图中心item
	GraphicsBaseItem* m_centerItem = nullptr;
};

#endif // AIEXPANDGRAPHICSCENE_H
